// PROGRAMA : SCRP0000
// SISTEMA : SISP - SISTEMA DE INFORMACOES DE SEGURANCA PUBLICA
// IDENTIFICACAO CRIMINAL
// BIBLIOTECA : SISP
// ORGAO : GEJUSPC - GERENCIA DE ESTADO DA JUSTICA, SEGURANCA
// PUBLICA E CIDADANIA
// OBJETIVO : ENTRADA NO SISTEMA TELA INICIAL
// PROGRAMADOR: JOSE ANTONIO COELHO
// DATA : 29 DE JULHO DE 1997
// ALTERACAO : 24/04/2008 POR SOLON MIRANDA
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.ioc.spring.VRaptorRequestHolder;
import br.com.crud4j.security.model.entity.SecUsuario;
import br.com.crud4j.security.util.SecurityUtil;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Scrm0000;
import br.com.vti.sisp_sicrim.antigo.model.SicNumero;
import br.com.vti.sisp_sicrim.antigo.model.SicSenha;
import br.com.vti.sisp_sicrim.antigo.model.Usuario;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Scrg001;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Scrp0000 OBJETIVO : ENTRADA NO SISTEMA TELA INICIAL *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/scrp0000")
public class Scrp0000 {
	// Views utilizadas
	SicNumero numeroView = new SicNumero();
	SicSenha senhaView = new SicSenha();
	// Telas/relatorios utilizados
	Scrm0000 scrm0000;
	// Includes utilizados
	// Areas globais / session
	Scrg001 scrg001;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Scrp0000 scrp0000Anterior;
	String faseproc = "0";

	private String jTime = "";
	private String jHorario = "";

	private String mensagemInicial = "";

	private Scrm0000 preMapas() {
		sessao.setHttpSession(UtilBean.getSessao());
		sessao.setServletContext(UtilBean.getServletContext());
		sessao.setSisgsisp(new Sisgsisp());
		sessao.setScrg001(new Scrg001());
		sessao.getScrg001().setWVltw(1);
		sessao.getScrg001().setWProgramaw(this.getClass().getSimpleName().toUpperCase());

		scrm0000 = new Scrm0000(true, sessao);
		jTime = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime());
		jHorario = new SimpleDateFormat("HHmmss").format(Calendar.getInstance().getTime());

		return scrm0000;
	}

	public Scrp0000(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	@Get
	public void executar(Scrm0000 scrm0000) {
		try {
			main(scrm0000);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroScrcerro(e, sessao, this.getClass().getSimpleName());
		}
	}
        
	private void main(Scrm0000 pscrm0000) {
		if (pscrm0000 == null) {
			primeiraVez = true;
			sessao.setUsuario(null);
			// scrm0000 = new Scrm0000 (primeiraVez);
			scrm0000 = preMapas();
			scrm0000.setNavegar("../scrp0000/executar");
			scrm0000.setMensagem(mensagemInicial);
			result.include("scrm0000", scrm0000);
			sessao.setAtributo("SCRP0000", this);
			scrm0000.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pscrm0000);
		}

		scrm0000.receberTela(false, result);
		if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
			sessao.setAtributo("SCRP0000", this);
			result.include("scrm0000", scrm0000);
			scrm0000.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}

		// Par�grafo: fd1()
		if (senhaView.consultaMatricula(scrm0000.getJmatricula())) {
			scrm0000.setJcont(scrm0000.getJcont() + 1);
			if (scrm0000.getJcont() == 3) {
				scrm0000.setMensagem("### ULTRAPASADA O NUMERO MAXIMO DE TENTATIVAS - TECLE <ENTER>");
				sessao.setAtributo("SCRP0000", this);
				result.include("scrm0000", scrm0000);
				scrm0000.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			if (!scrm0000.getJsenha().trim().toUpperCase().equals(senhaView.getSenha().trim().toUpperCase())) {
				scrm0000.enviarMensagem("jSenha", "VERIFIQUE CORRETAMENTE SUA SENHA");
				sessao.setAtributo("SCRP0000", this);
				result.include("scrm0000", scrm0000);
				scrm0000.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			sessao.getScrg001().setWNivelw(senhaView.getNivel());
			sessao.getScrg001().setWSenhaw(scrm0000.getJsenha().toUpperCase());

			if (!scrm0000.getJnsenh().trim().equals("")) {
				if (!scrm0000.getJnsenh().trim().equals(scrm0000.getJwsenh().trim())) {
					scrm0000.setMensagem("CONFIRMACAO INVALIDA - TECLA <ENTER>             ");
					sessao.setAtributo("SCRP0000", this);
					result.include("scrm0000", scrm0000);
					scrm0000.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				} else {
					senhaView.setSenha(scrm0000.getJwsenh().toUpperCase());
					senhaView.atualiza();
					// //dao.commit();
					sessao.getScrg001().setWSenhaw(scrm0000.getJwsenh().toUpperCase());
				}
			}
		}

		if (senhaView.registrosProcessados() == 0) {
			scrm0000.setJcont(scrm0000.getJcont() + 1);
			if (scrm0000.getJcont() == 3) {
				scrm0000.setMensagem("### ULTRAPASADA O NUMERO MAXIMO DE TENTATIVAS - TECLE <ENTER>");
				sessao.setAtributo("SCRP0000", this);
				result.include("scrm0000", scrm0000);
				scrm0000.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			scrm0000.setMensagem("### USUARIO NAO CADASTRADO NO SISTEMA - TECLE <ENTER>");
			sessao.setAtributo("SCRP0000", this);
			result.include("scrm0000", scrm0000);
			scrm0000.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}
		// FDN. READ (1) NUMERO-VIEW
		// DELETE(FDN.) END TRANSACTION
		// END-READ
		// IF *COUNTER(FDN.) = 0

		// 'INFORME O ULTIMO REGISTRO CRIMINAL REGISTRADO'(I)
		// ULT-NUM(AD=AIL'_' SG=OFF)
		// IF #ULT-NUM = 0
		// REINPUT 'POR FAVOR, INFORME O ULTIMO REGISTRO CRIMINAL GERADO'
		// ALARM
		// END-IF
		// NUMERO-VIEW.ULTIMO-NUMERO := #ULT-NUM
		// STORE NUMERO-VIEW
		// END TRANSACTION

		sessao.getScrg001().setWMatriculaw(scrm0000.getJmatricula());
		Usuario usuario = new Usuario(scrm0000.getJmatricula(), senhaView.getNome());
		sessao.setUsuario(usuario);
		// END-IF
		// //dao.rollback();

		Scrpp001 scrpp001 = new Scrpp001(result, sessao);
		scrpp001.executar(null);
	}

	private void restaurarEstados(Scrm0000 pscrm0000) {
		this.scrp0000Anterior = (Scrp0000) sessao.getAtributo("SCRP0000");
		if (pscrm0000 != null) {
			scrm0000 = pscrm0000;
			scrm0000.setJempresaj(sessao.getScrg001().getWEmpresaw());
			scrm0000.setJprogramaj(sessao.getScrg001().getWProgramaw());
		} else {
			scrm0000 = this.scrp0000Anterior.scrm0000;
		}
		scrm0000.setSessao(sessao);
		this.faseproc = this.scrp0000Anterior.faseproc;
	}

	protected void setMensagem(String mensagem) {
		mensagemInicial = mensagem;
	}
}
